$(document).ready(function () {
// COLLAPSABLE WIDGETS (on Dashboard & Profile pages)
// toggle widget box contents
$('a.toggle_box_contents').bind('click', toggleContent);
// toggle widget box edit panel
$('a.toggle_box_edit_panel').click(function () {
$(this.parentNode.parentNode).children(".collapsable_box_editpanel").slideToggle("fast");
return false;
});
// toggle customise edit panel
$('a.toggle_customise_edit_panel').click(function () {
$('div#customise_editpanel').slideToggle("fast");
return false;
});
// toggle plugin's settings nad more info on admin tools admin
$('a.pluginsettings_link').click(function () {
$(this.parentNode.parentNode).children(".pluginsettings").slideToggle("fast");
return false;
});
$('a.manifest_details').click(function () {
$(this.parentNode.parentNode).children(".manifest_file").slideToggle("fast");
return false;
});
// reusable generic hidden panel
$('a.collapsibleboxlink').click(function () {
$(this.parentNode.parentNode).children(".collapsible_box").slideToggle("fast");
return false;
});
// WIDGET GALLERY EDIT PANEL
// Sortable widgets
var els = ['#leftcolumn_widgets', '#middlecolumn_widgets', '#rightcolumn_widgets', '#widget_picker_gallery' ];
var $els = $(els.toString());
$els.sortable({
items: '.draggable_widget',
handle: '.drag_handle',
forcePlaceholderSize: true,
placeholder: 'ui-state-highlight',
cursor: 'move',
opacity: 0.9,
appendTo: 'body',
connectWith: els,
start:function(e,ui) {
},
stop: function(e,ui) {
// refresh list before updating hidden fields with new widget order
$(this).sortable( "refresh" );
var widgetNamesLeft = outputWidgetList('#leftcolumn_widgets');
var widgetNamesMiddle = outputWidgetList('#middlecolumn_widgets');
var widgetNamesRight = outputWidgetList('#rightcolumn_widgets');
document.getElementById('debugField1').value = widgetNamesLeft;
document.getElementById('debugField2').value = widgetNamesMiddle;
document.getElementById('debugField3').value = widgetNamesRight;
}
});
// bind more info buttons - called when new widgets are created
widget_moreinfo();
// set-up hover class for dragged widgets
$("#rightcolumn_widgets").droppable({
accept: ".draggable_widget",
hoverClass: 'droppable-hover'
});
$("#middlecolumn_widgets").droppable({
accept: ".draggable_widget",
hoverClass: 'droppable-hover'
});
$("#leftcolumn_widgets").droppable({
accept: ".draggable_widget",
hoverClass: 'droppable-hover'
});
}); /* end document ready function */
// List active widgets for each page column
function outputWidgetList(forElement) {
return( $("input[name='handler'], input[name='guid']", forElement ).makeDelimitedList("value") );
}
// Make delimited list
jQuery.fn.makeDelimitedList = function(elementAttribute) {
var delimitedListArray = new Array();
var listDelimiter = "::";
// Loop over each element in the stack and add the elementAttribute to the array
this.each(function(e) {
var listElement = $(this);
// Add the attribute value to our values array
delimitedListArray[delimitedListArray.length] = listElement.attr(elementAttribute);
}
);
// Return value list by joining the array
return(delimitedListArray.join(listDelimiter));
}
// Read each widgets collapsed/expanded state from cookie and apply
function widget_state(forWidget) {
var thisWidgetState = $.cookie(forWidget);
if (thisWidgetState == 'collapsed') {
forWidget = "#" + forWidget;
$(forWidget).find("div.collapsable_box_content").hide();
$(forWidget).find("a.toggle_box_contents").html('+');
$(forWidget).find("a.toggle_box_edit_panel").fadeOut('medium');
};
}
// Toggle widgets contents and save to a cookie
var toggleContent = function(e) {
var targetContent = $('div.collapsable_box_content', this.parentNode.parentNode);
if (targetContent.css('display') == 'none') {
targetContent.slideDown(400);
$(this).html('-');
$(this.parentNode).children(".toggle_box_edit_panel").fadeIn('medium');
// set cookie for widget panel open-state
var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id');
$.cookie(thisWidgetName, 'expanded', { expires: 365 });
} else {
targetContent.slideUp(400);
$(this).html('+');
$(this.parentNode).children(".toggle_box_edit_panel").fadeOut('medium');
// make sure edit pane is closed
$(this.parentNode.parentNode).children(".collapsable_box_editpanel").hide();
// set cookie for widget panel closed-state
var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id');
$.cookie(thisWidgetName, 'collapsed', { expires: 365 });
}
return false;
};
// More info tooltip in widget gallery edit panel
function widget_moreinfo() {
$("img.more_info").hover(function(e) {
var widgetdescription = $("input[name='description']", this.parentNode.parentNode.parentNode ).attr('value');
$("body").append("<p id='widget_moreinfo'><b>"+ widgetdescription +" </b></p>");
if (e.pageX < 900) {
$("#widget_moreinfo")
.css("top",(e.pageY + 10) + "px")
.css("left",(e.pageX + 10) + "px")
.fadeIn("medium");
}
else {
$("#widget_moreinfo")
.css("top",(e.pageY + 10) + "px")
.css("left",(e.pageX - 210) + "px")
.fadeIn("medium");
}
},
function() {
$("#widget_moreinfo").remove();
});
$("img.more_info").mousemove(function(e) {
// action on mousemove
});
};
// COOKIES
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
// CAUTION: Needed to parenthesize options.path and options.domain
// in the following expressions, otherwise they evaluate to undefined
// in the packed version for some reason.
var path = options.path ? '; path=' + (options.path) : '';
var domain = options.domain ? '; domain=' + (options.domain) : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};
// ELGG TOOLBAR MENU
$.fn.elgg_topbardropdownmenu = function(options) {
options = $.extend({speed: 350}, options || {});
this.each(function() {
var root = this, zIndex = 5000;
function getSubnav(ele) {
if (ele.nodeName.toLowerCase() == 'li') {
var subnav = $('> ul', ele);
return subnav.length ? subnav[0] : null;
} else {
return ele;
}
}
function getActuator(ele) {
if (ele.nodeName.toLowerCase() == 'ul') {
return $(ele).parents('li')[0];
} else {
return ele;
}
}
function hide() {
var subnav = getSubnav(this);
if (!subnav) return;
$.data(subnav, 'cancelHide', false);
setTimeout(function() {
if (!$.data(subnav, 'cancelHide')) {
$(subnav).slideUp(100);
}
}, 250);
}
function show() {
var subnav = getSubnav(this);
if (!subnav) return;
$.data(subnav, 'cancelHide', true);
$(subnav).css({zIndex: zIndex++}).slideDown(options.speed);
if (this.nodeName.toLowerCase() == 'ul') {
var li = getActuator(this);
$(li).addClass('hover');
$('> a', li).addClass('hover');
}
}
$('ul, li', this).hover(show, hide);
$('li', this).hover(
function() { $(this).addClass('hover'); $('> a', this).addClass('hover'); },
function() { $(this).removeClass('hover'); $('> a', this).removeClass('hover'); }
);
});
};
var submenuLayer = 1000;
function setup_avatar_menu(parent) {
if (!parent) {
parent = document;
}
// avatar image menu link
$(parent).find("div.usericon img").mouseover(function() {
// find nested avatar_menu_button and show
$(this.parentNode.parentNode).children(".avatar_menu_button").show();
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow");
//$(this.parentNode.parentNode).css("z-index", submenuLayer);
})
.mouseout(function() {
if($(this).parent().parent().find("div.sub_menu").css('display')!="block") {
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_on");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(this.parentNode.parentNode).children(".avatar_menu_button").hide();
}
else {
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_on");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(this.parentNode.parentNode).children(".avatar_menu_button").show();
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow");
}
});
// avatar contextual menu
$(".avatar_menu_button img").click(function(e) {
var submenu = $(this).parent().parent().find("div.sub_menu");
// close submenu if arrow is clicked & menu already open
if(submenu.css('display') == "block") {
//submenu.hide();
}
else {
// get avatar dimensions
var avatar = $(this).parent().parent().parent().find("div.usericon");
//alert( "avatarWidth: " + avatar.width() + ", avatarHeight: " + avatar.height() );
// move submenu position so it aligns with arrow graphic
if (e.pageX < 840) { // popup menu to left of arrow if we're at edge of page
submenu.css("top",(avatar.height()) + "px")
.css("left",(avatar.width()-15) + "px")
.fadeIn('normal');
}
else {
submenu.css("top",(avatar.height()) + "px")
.css("left",(avatar.width()-166) + "px")
.fadeIn('normal');
}
// force z-index - workaround for IE z-index bug
avatar.css("z-index", submenuLayer);
avatar.find("a.icon img").css("z-index", submenuLayer);
submenu.css("z-index", submenuLayer+1);
submenuLayer++;
// change arrow to 'on' state
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_on");
}
// hide any other open submenus and reset arrows
$("div.sub_menu:visible").not(submenu).hide();
$(".avatar_menu_button").removeClass("avatar_menu_arrow");
$(".avatar_menu_button").removeClass("avatar_menu_arrow_on");
$(".avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(".avatar_menu_button").hide();
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_on");
$(this.parentNode.parentNode).children("div.avatar_menu_button").show();
//alert("submenuLayer = " +submenu.css("z-index"));
})
// hover arrow each time mouseover enters arrow graphic (eg. when menu is already shown)
.mouseover(function() {
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_on");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow");
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_hover");
})
// if menu not shown revert arrow, else show 'menu open' arrow
.mouseout(function() {
if($(this).parent().parent().find("div.sub_menu").css('display')!="block"){
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow");
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow");
}
else {
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow");
$(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_on");
}
});
// hide avatar menu if click occurs outside of menu
// and hide arrow button
$(document).click(function(event) {
var target = $(event.target);
if (target.parents(".usericon").length == 0) {
$(".usericon div.sub_menu").fadeOut();
$(".avatar_menu_button").removeClass("avatar_menu_arrow");
$(".avatar_menu_button").removeClass("avatar_menu_arrow_on");
$(".avatar_menu_button").removeClass("avatar_menu_arrow_hover");
$(".avatar_menu_button").hide();
}
});
}
$(document).ready(function() {
setup_avatar_menu();
}); 